App關閉再次啟動後,需要保存的資料可以先保存在shared_preference
Android 也叫Shared preferences, iOS是UserDefault
首先建立一個Class, 並使instance不會重new的singleton
在init() 裡先取得instance SharedPreferences.getInstance()
假設會存accessToken 和 userName 這兩個屬性
import 'package:it_home/utils/static_name.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UserDefault {
static UserDefault instance = UserDefault._internal();
factory UserDefault() => instance;
UserDefault._internal();
late SharedPreferences _prefs;
init() async {
_prefs = await SharedPreferences.getInstance();
}
String get accessToken => _prefs.getString(ACCESS_TOKEN) ?? "";
set accessToken(String? value) {
if (value != null) {
_prefs.setString(ACCESS_TOKEN, value);
}
}
set userName(String name) => _prefs.setString(USER_NAME, name);
String get userName => _prefs.getString(USER_NAME) ?? "";
}
開一個空的 static_name.dart 檔(或者自己習慣的命名)
並將hard code的字串寫在另一個檔案裡(避免再次用到的時候寫錯)
(ACCESS_TOKEN, USER_NAME)
const String ACCESS_TOKEN = 'accessToken';
const String USER_NAME = 'user_name';
接著在main.dart 裡面新增
在app啟動時 將SharedPreferences 先new一次
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await UserDefault().init();
runApp(MyApp());
}
最後使用時呼叫UserDefault().屬性 進行讀或寫
@override
void onInit() {
print(UserDefault().userName);
UserDefault().userName = "it_home_user";
print(UserDefault().userName);
super.onInit();
}
下一篇將為大家介紹 image_picker